home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-01
/
ov143b.zip
/
BIOSIO.ASM
< prev
next >
Wrap
Assembly Source File
|
1993-01-04
|
7KB
|
272 lines
PAGE 60,132
TITLE Routines to do bios screen I/O
; 004 27-May-87 biosio.asm
; Copyright (c) 1986,1987 by Blue Sky Software. All rights reserved.
_TEXT SEGMENT BYTE PUBLIC 'CODE'
_TEXT ENDS
CONST SEGMENT WORD PUBLIC 'CONST'
CONST ENDS
_BSS SEGMENT WORD PUBLIC 'BSS'
_BSS ENDS
_DATA SEGMENT WORD PUBLIC 'DATA'
_DATA ENDS
DGROUP GROUP CONST, _BSS, _DATA
ASSUME CS: _TEXT, DS: DGROUP, SS: DGROUP, ES: DGROUP
_DATA SEGMENT
EXTRN _vid_attrib:BYTE
_DATA ENDS
_TEXT SEGMENT
;******************************************************************************
;
; getvideomode(width,page) get the current video mode/width/page
; int *width, *page;
;
;******************************************************************************
PUBLIC _getvideomode
_getvideomode PROC NEAR
push bp
mov bp,sp
mov ah,0fh ; just use bios int 10h - 15
int 10h
mov cl,bh ; save page # (bh)
xor ch,ch
mov bx,[bp+6] ; page pointer
mov [bx],cx
mov cl,ah ; current width
mov bx,[bp+4] ; width pointer
mov [bx],cx
xor ah,ah ; al already has the mode
mov sp,bp
pop bp
ret
_getvideomode ENDP
;******************************************************************************
;
; setvideomode(mode) set the current video mode
; int mode;
;
;******************************************************************************
PUBLIC _setvideomode
_setvideomode PROC NEAR
push bp
mov bp,sp
mov ah,0 ; just use bios int 10h - 0
mov al,[bp+4] ; low byte of mode
int 10h
mov sp,bp
pop bp
ret
_setvideomode ENDP
;******************************************************************************
;
; readcursor(page,row,col,stscan,endscan) /* read cursor info */
; int page;
; int *row, *col, *stscan, *endscan;
;
;******************************************************************************
PUBLIC _readcursor
_readcursor PROC NEAR
push bp
mov bp,sp
mov ah,3 ; just use bios int 10h - 3
mov bh,[bp+4] ; low byte of page
int 10h
xor ah,ah
mov al,dh ; cursor row
mov bx,[bp+6]
mov [bx],ax
mov al,dl ; cursor column
mov bx,[bp+8]
mov [bx],ax
mov al,ch ; cursor start scan line
mov bx,[bp+10]
mov [bx],ax
mov al,cl ; cursor end scan line
mov bx,[bp+12]
mov [bx],ax
mov sp,bp
pop bp
ret
_readcursor ENDP
;******************************************************************************
;
; setcursorsize(startscan,endscan) /* set cursor size */
; int startscan, endscan;
;
;******************************************************************************
PUBLIC _setcursorsize
_setcursorsize PROC NEAR
push bp
mov bp,sp
mov ah,1 ; just use DOS int 10h - 1
mov ch,[bp+4] ; starting scan line
mov cl,[bp+6] ; ending scan line
int 10h
mov sp,bp
pop bp
ret
_setcursorsize ENDP
;******************************************************************************
;
; setdisplaypage(page) /* set current display page # */
; int page;
;
;******************************************************************************
PUBLIC _setdisplaypage
_setdisplaypage PROC NEAR
push bp
mov bp,sp
mov ah,5 ; just use DOS int 10h - 5
mov al,[bp+4] ; wanted display page #
int 10h
mov sp,bp
pop bp
ret
_setdisplaypage ENDP
;******************************************************************************
;
; getraw() get a char from console without ^C checking
;
;******************************************************************************
PUBLIC _getraw
_getraw PROC NEAR
push bp
mov bp,sp
mov ah,7 ; just use DOS int 21h - 7
int 21h
xor ah,ah
mov sp,bp
pop bp
ret
_getraw ENDP
;******************************************************************************
;
; putchr(ch) put char to console in TTY mode with current video attribute
;
;******************************************************************************
PUBLIC _putchr
_putchr PROC NEAR
push bp
mov bp,sp
mov ah,0Eh ; do a write TTY call (updates cursor)
mov al,[bp+4] ; char to write
int 10h
mov sp,bp
pop bp
ret
_putchr ENDP
;******************************************************************************
;
; peekchr() peek a char from console without removing from buffer
;
;******************************************************************************
PUBLIC _peekchr
_peekchr PROC NEAR
push bp
mov bp,sp
mov ah,1 ; just use BIOS int 16h - 1
int 16h
jz nochr ; Z means no char waiting
xor ah,ah ; got a char in al, clr ah
jmp SHORT peekret
nochr: xor ax,ax ; tell caller no char
peekret: mov sp,bp
pop bp
ret
_peekchr ENDP
;******************************************************************************
;
; getverify() get DOS verify flag
;
;******************************************************************************
PUBLIC _getverify
_getverify PROC NEAR
push bp
mov bp,sp
mov ah,54h ; get DOS verify flag
int 21h
xor ah,ah ; returned in AL, clear AH
mov sp,bp
pop bp
ret
_getverify ENDP
_TEXT ENDS
END